home *** CD-ROM | disk | FTP | other *** search
/ Freelog 100 / FreelogNo100-NovembreDecembre2010.iso / Musique / solfege / solfege-win32-3.17.0.exe / {app} / bin / Lib / bsddb / test / test_compat.py < prev    next >
Text File  |  2005-10-28  |  5KB  |  192 lines

  1. """
  2. Test cases adapted from the test_bsddb.py module in Python's
  3. regression test suite.
  4. """
  5.  
  6. import sys, os, string
  7. import unittest
  8. import tempfile
  9.  
  10. from test_all import verbose
  11.  
  12. try:
  13.     # For Pythons w/distutils pybsddb
  14.     from bsddb3 import db, hashopen, btopen, rnopen
  15. except ImportError:
  16.     # For Python 2.3
  17.     from bsddb import db, hashopen, btopen, rnopen
  18.  
  19.  
  20. class CompatibilityTestCase(unittest.TestCase):
  21.     def setUp(self):
  22.         self.filename = tempfile.mktemp()
  23.  
  24.     def tearDown(self):
  25.         try:
  26.             os.remove(self.filename)
  27.         except os.error:
  28.             pass
  29.  
  30.  
  31.     def test01_btopen(self):
  32.         self.do_bthash_test(btopen, 'btopen')
  33.  
  34.     def test02_hashopen(self):
  35.         self.do_bthash_test(hashopen, 'hashopen')
  36.  
  37.     def test03_rnopen(self):
  38.         data = string.split("The quick brown fox jumped over the lazy dog.")
  39.         if verbose:
  40.             print "\nTesting: rnopen"
  41.  
  42.         f = rnopen(self.filename, 'c')
  43.         for x in range(len(data)):
  44.             f[x+1] = data[x]
  45.  
  46.         getTest = (f[1], f[2], f[3])
  47.         if verbose:
  48.             print '%s %s %s' % getTest
  49.  
  50.         assert getTest[1] == 'quick', 'data mismatch!'
  51.  
  52.         rv = f.set_location(3)
  53.         if rv != (3, 'brown'):
  54.             self.fail('recno database set_location failed: '+repr(rv))
  55.  
  56.         f[25] = 'twenty-five'
  57.         f.close()
  58.         del f
  59.  
  60.         f = rnopen(self.filename, 'w')
  61.         f[20] = 'twenty'
  62.  
  63.         def noRec(f):
  64.             rec = f[15]
  65.         self.assertRaises(KeyError, noRec, f)
  66.  
  67.         def badKey(f):
  68.             rec = f['a string']
  69.         self.assertRaises(TypeError, badKey, f)
  70.  
  71.         del f[3]
  72.  
  73.         rec = f.first()
  74.         while rec:
  75.             if verbose:
  76.                 print rec
  77.             try:
  78.                 rec = f.next()
  79.             except KeyError:
  80.                 break
  81.  
  82.         f.close()
  83.  
  84.  
  85.     def test04_n_flag(self):
  86.         f = hashopen(self.filename, 'n')
  87.         f.close()
  88.  
  89.  
  90.     def do_bthash_test(self, factory, what):
  91.         if verbose:
  92.             print '\nTesting: ', what
  93.  
  94.         f = factory(self.filename, 'c')
  95.         if verbose:
  96.             print 'creation...'
  97.  
  98.         # truth test
  99.         if f:
  100.             if verbose: print "truth test: true"
  101.         else:
  102.             if verbose: print "truth test: false"
  103.  
  104.         f['0'] = ''
  105.         f['a'] = 'Guido'
  106.         f['b'] = 'van'
  107.         f['c'] = 'Rossum'
  108.         f['d'] = 'invented'
  109.         # 'e' intentionally left out
  110.         f['f'] = 'Python'
  111.         if verbose:
  112.             print '%s %s %s' % (f['a'], f['b'], f['c'])
  113.  
  114.         if verbose:
  115.             print 'key ordering...'
  116.         start = f.set_location(f.first()[0])
  117.         if start != ('0', ''):
  118.             self.fail("incorrect first() result: "+repr(start))
  119.         while 1:
  120.             try:
  121.                 rec = f.next()
  122.             except KeyError:
  123.                 assert rec == f.last(), 'Error, last <> last!'
  124.                 f.previous()
  125.                 break
  126.             if verbose:
  127.                 print rec
  128.  
  129.         assert f.has_key('f'), 'Error, missing key!'
  130.  
  131.         # test that set_location() returns the next nearest key, value
  132.         # on btree databases and raises KeyError on others.
  133.         if factory == btopen:
  134.             e = f.set_location('e')
  135.             if e != ('f', 'Python'):
  136.                 self.fail('wrong key,value returned: '+repr(e))
  137.         else:
  138.             try:
  139.                 e = f.set_location('e')
  140.             except KeyError:
  141.                 pass
  142.             else:
  143.                 self.fail("set_location on non-existant key did not raise KeyError")
  144.  
  145.         f.sync()
  146.         f.close()
  147.         # truth test
  148.         try:
  149.             if f:
  150.                 if verbose: print "truth test: true"
  151.             else:
  152.                 if verbose: print "truth test: false"
  153.         except db.DBError:
  154.             pass
  155.         else:
  156.             self.fail("Exception expected")
  157.  
  158.         del f
  159.  
  160.         if verbose:
  161.             print 'modification...'
  162.         f = factory(self.filename, 'w')
  163.         f['d'] = 'discovered'
  164.  
  165.         if verbose:
  166.             print 'access...'
  167.         for key in f.keys():
  168.             word = f[key]
  169.             if verbose:
  170.                 print word
  171.  
  172.         def noRec(f):
  173.             rec = f['no such key']
  174.         self.assertRaises(KeyError, noRec, f)
  175.  
  176.         def badKey(f):
  177.             rec = f[15]
  178.         self.assertRaises(TypeError, badKey, f)
  179.  
  180.         f.close()
  181.  
  182.  
  183. #----------------------------------------------------------------------
  184.  
  185.  
  186. def test_suite():
  187.     return unittest.makeSuite(CompatibilityTestCase)
  188.  
  189.  
  190. if __name__ == '__main__':
  191.     unittest.main(defaultTest='test_suite')
  192.